2023/12/231246字符

BigInt

  • 兼容性差(chrome+67、opera+54,edge和safari还没有实现,firefox默认不支持)
let bigint = BigInt(10n);  // 与 symbol 一样不能 new
9007199254740993;  //--> 9007199254740992
9007199254740993n;  //--> 9007199254740993n

BigInt('9007199254740993');  //--> 9007199254740993n  不加引号数值还会有偏差

BigInt(false);  //--> 0n  不支持 null、undefined、小数、字符串

typeof 10n;  //--> bigint

10n + 20n;  //--> 30n  除一元加号 + 运算符外,所有运算符都可用于 BigInt
10n == 10;  //--> true
10n === 10;  //--> false

隐式类型转换

10 + 10n;  //--> TypeError  number 类型与 bigint 类型不能执行算术操作
typeof (10 + Number(10n));  //--> number
[3n, 4, 2, 1n, 0, -1n].sort();  //--> [-1n, 0, 1n, 2, 3n, 4]  排序不会发生类型转换

API

import JSBI from './jsbi.mjs';
const b1 = JSBI.BigInt(Number.MAX_SAFE_INTEGER);
const b2 = JSBI.BigInt('10');
const result = JSBI.add(b1, b2);
console.log(String(result));

使用 BigInt 的一个优点是,一旦浏览器支持,就不需要重写代码。相反,可以使用 babel 插件自动将 JSBI 代码编译为原生 BigInt 代码